﻿''' <summary>
''' Class xử lý các thao tác nghiệp vụ
''' </summary>
''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
Public Class clsBLBase

#Region "Property"
    Protected Property DataObject() As DL.clsDLBase

    ''' <summary>
    ''' Thuộc tính lưu dataset
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Private m_dsFMS As New FMSDataSet
    Public Property dsFMS() As FMSDataSet
        Get
            Return m_dsFMS
        End Get
        Set(ByVal value As FMSDataSet)
            m_dsFMS = value
        End Set
    End Property

    ''' <summary>
    ''' Thuộc tính lưu tên bảng hiện đang làm việc
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Private m_sTableName As String
    Public Property TableName() As String
        Get
            Return m_sTableName
        End Get
        Set(ByVal value As String)
            m_sTableName = value
        End Set
    End Property

    ''' <summary>
    ''' Thuộc tính lưu bản ghi hiện đang làm việc trong bảng
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Private m_drCurrentRow As DataRow
    Public Property CurrentRow() As DataRow
        Get
            Return m_drCurrentRow
        End Get
        Set(ByVal value As DataRow)
            m_drCurrentRow = value
        End Set
    End Property

#End Region

#Region "Method"

#Region "Constructor"

    ''' <summary>
    ''' Constructor đặt tên cho bảng hiện đang làm việc
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Sub New(ByVal connectionString As String)
        SetTableName()
        DataObject = New DL.clsDLBase(connectionString)
    End Sub
#End Region

#Region "Overridable"

    ''' <summary>
    ''' Sub đặt tên cho table hiện đang làm việc
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Protected Overridable Sub SetTableName()

    End Sub

    ''' <summary>
    ''' Sub tạo mới một bản ghi trong bảng
    ''' </summary>
    ''' <returns>Trả lại một bản ghi trống</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Overridable Function InitNewRow() As DataRow
        Return New Object
    End Function
#End Region

    ''' <summary>
    ''' Hàm xác định đối tượng (chuyển tên bảng thành tiếng Việt)
    ''' </summary>
    ''' <returns>Tên bảng sau khi chuyển thành tiếng việt</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function IdentifyObject() As String
        Dim objectName As String = String.Empty
        If TableName = dsFMS.Category.TableName Then
            objectName = My.Resources.ObjCategory
        ElseIf TableName = dsFMS.Customer.TableName Then
            objectName = My.Resources.ObjCustomer
        ElseIf TableName = dsFMS.Employee.TableName Then
            objectName = My.Resources.ObjEmployee
        ElseIf TableName = dsFMS.Invoice.TableName Then
            objectName = My.Resources.ObjInvoice
        ElseIf TableName = dsFMS.InvoiceDetail.TableName Then
            objectName = My.Resources.ObjInvoiceDetail
        ElseIf TableName = dsFMS.Item.TableName Then
            objectName = My.Resources.ObjItem
        ElseIf TableName = dsFMS.Payment.TableName Then
            objectName = My.Resources.ObjPayment
        ElseIf TableName = dsFMS.Role.TableName Then
            objectName = My.Resources.ObjRole
        ElseIf TableName = dsFMS.Shipment.TableName Then
            objectName = My.Resources.ObjShipment
        ElseIf TableName = dsFMS.ShipmentDetail.TableName Then
            objectName = My.Resources.ObjShimentDetail
        ElseIf TableName = dsFMS.SubCategory.TableName Then
            objectName = My.Resources.ObjSubCategory
        End If
        Return objectName
    End Function

    ''' <summary>
    ''' Hàm thực hiện việc kiểm tra sự hợp lệ của LoginName và Password mà người dùng nhập vào
    ''' </summary>
    ''' <param name="loginName">Tên đăng nhập</param>
    ''' <param name="password">Mật khẩu</param>
    ''' <returns>Trả lại true nếu đăng nhập thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 09/07/2012</remarks>
    Public Function CheckUser(ByVal loginName As String, ByVal password As String) As String
        Return DataObject.CheckUser(loginName, password)
    End Function

    ''' <summary>
    ''' Sub lấy dữ liệu trong bảng đang làm việc hiện thời
    ''' </summary>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Sub GetData()
        DataObject.GetData(dsFMS, TableName)
    End Sub

    ''' <summary>
    ''' Sub lấy dữ liệu từ database theo khóa ngoại và fill vào dataset
    ''' </summary>
    ''' <param name="tableName">Tên của bảng cần lấy dữ liệu</param>
    ''' <param name="columnName">Tên của cột cần chọn lọc</param>
    ''' <param name="value">Giá trị cần để chọn lọc dữ liệu</param>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Sub GetDataByValue(ByVal tableName As String, ByVal columnName As String, ByVal value As Object)
        DataObject.GetDataByValue(dsFMS, tableName, columnName, value)
    End Sub

    ''' <summary>
    ''' Sub lấy dữ liệu từ một bảng tùy chọn
    ''' </summary>
    ''' <param name="tableName">Tên của bảng muốn lấy dữ liệu</param>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Sub GetTableData(ByVal tableName As String)
        DataObject.GetData(dsFMS, tableName)
    End Sub

    ''' <summary>
    ''' Hàm thêm mới một bản ghi từ bảng hiện thời vào database
    ''' </summary>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function AddRecord() As Boolean
        Return DataObject.SaveData(CurrentRow)
    End Function

    ''' <summary>
    ''' Hàm lưu một bản ghi từ bảng tùy chọn vào database
    ''' </summary>
    ''' <param name="row"></param>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function EditRecord(ByVal row As DataRow) As Boolean
        Return DataObject.SaveData(row)
    End Function

    ''' <summary>
    ''' Hàm xóa một bản ghi trong database theo khóa chính
    ''' </summary>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function DeleteCurrentRow(ByVal deleteReason As String) As Boolean
        Return DataObject.DeleteCurrentRow(CurrentRow, deleteReason)
    End Function

    ''' <summary>
    ''' Hàm xóa một bản ghi trong database theo dữ liệu
    ''' </summary>
    ''' <param name="tableName">Tên của bảng muốn xóa dữ liệu</param>
    ''' <param name="columnName">Tên của cột để chọn lọc dữ liệu</param>
    ''' <param name="value">Giá trị cần xóa trong bảng</param>
    ''' <returns>Trả lại đúng nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function DeleteByValue(ByVal tableName As String, ByVal columnName As String, ByVal value As Object) As Boolean
        Return DataObject.DeleteByValue(tableName, columnName, value)
    End Function

    ''' <summary>
    ''' Hàm lưu nhiều dữ liệu vào một bảng
    ''' </summary>
    ''' <param name="table">Bảng muốn lưu dữ liệu</param>
    ''' <returns>Trả lại true nếu lưu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function AddTable(ByVal table As DataTable) As Boolean
        Return DataObject.AddTable(table)
    End Function

    ''' <summary>
    ''' Hàm kiểm tra trùng lặp dữ liệu
    ''' </summary>
    ''' <param name="columnName">Tên của trường cần kiểm tra</param>
    ''' <param name="checkRow">Giá trị để kiểm tra</param>
    ''' <returns>Trả lại true nếu dữ liệu không lặp và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 10/04/2011</remarks>
    Public Function CheckAvailable(ByVal columnName As String, ByVal checkRow As DataRow) As Boolean
        Return DataObject.CheckAvailable(columnName, checkRow)
    End Function

    ''' <summary>
    ''' Hàm lưu dữ liệu theo kiểu cha - con
    ''' </summary>
    ''' <returns>Trả lại true nếu thành công và ngược lại</returns>
    ''' <remarks>Nguyễn Huy Thường added on 18/06/2012</remarks>
    Public Function SaveMasterDetail() As Boolean
        Dim childTable As New DataTable
        If TableName = dsFMS.Shipment.TableName Then
            childTable = dsFMS.ShipmentDetail
        ElseIf TableName = dsFMS.Invoice.TableName Then
            childTable = dsFMS.InvoiceDetail
        End If
        Return DataObject.SaveMasterDetail(dsFMS, CurrentRow, childTable)
    End Function

    ''' <summary>
    ''' Hàm lấy dữ liệu để hiển thị trên báo cáo
    ''' </summary>
    ''' <param name="tableName">Tên bảng để chứa dữ liệu</param>
    ''' <remarks>Nguyễn Huy Thường added on 13/11/2010</remarks>
    Public Sub FillReport(ByVal tableName As String)
        DataObject.FillReport(dsFMS, tableName)
    End Sub
#End Region
End Class
